﻿/**
*@description 判断元素的值是否为空
*
*@return 根据结果返回true,false
*/
String.prototype.isBlank = function() {
	 return (this==null || this.trim()=="" || typeof(this)=="undefined");
}

/**
*@description 字符串左边补str
*/
 String.prototype.padLeft = function(length,str) {
    var strRet;
    if(this == ""){
        strRet = this;
    }else{
        var cntGap = length - this.length;
        strRet = this;
        if(cntGap > 0){
            for(var idx = 0; idx < cntGap ;idx++ ){
                strRet = str + strRet;
            }
        }
    }
    return strRet;
 }
/**
*@description 字符串右边补str
*/
 String.prototype.padRight = function(length,str) {
    var strRet;
    if(this == ""){
        strRet = this;
    }else{
        var cntGap = length - this.length;
        strRet = this;
        if(cntGap > 0){
            for(var idx = 0; idx < cntGap ;idx++ ){
                strRet = strRet + str;
            }
        }
    }
    return strRet;
 }

/**
*@description 字符串转换为大写
*/
String.prototype.toUpper = function() {
    return this.toUpperCase();
}

/**
*@description 字符串转换为小写
*/
String.prototype.toLower = function() {
    return this.toLowerCase();	
}

/**
*@description 去掉字符串两端的空白字符
*/
String.prototype.trim = function() {
    return this.replace(/(^\s+)|(\s+$)/g, "");
}

/** 
*@description 去掉字符串左边的空白字符
*/
String.prototype.ltrim = function() {
    return this.replace(/(^\s+)/g, "");	
}

/** 
*@description 去掉字符串左边的空白字符
*/
String.prototype.rtrim = function() {
    return this.replace(/(\s+$)/g, "");	
}

/** 
*@description 去掉字符串中间的所有空白字符
*/
String.prototype.atrim = function() {
    return this.replace(/(\s)/g, "");	
}

/**
 * 比较字符串
 *
 * 根据结果返回 -1, 0, 1
 */
String.prototype.compareTo = function(str) {
    if (this == str) {
        return 0;
    } else if (this < str) {
        return -1;
    } else {
        return 1;
    }
}

/** 
*@description  忽略大小写比较字符串是否相等
* 
*@return  根据结果返回true,false
*/
String.prototype.isEquals = function (str) {
		return this.toLower() == str.toLower();
}

/**
*@description 判断字符串是否以指定的字符串开始
*/
String.prototype.startsWith = function(str) {
    return this.substr(0, str.length) == str;
}

/**
*@description 判断字符串是否以指定的字符串开始，忽略大小写
*/
String.prototype.iStartsWith = function(str) {
    return this.substr(0, str.length).isEquals(str);
}

/**
*@description 判断字符串是否以指定的字符串结束
*/
String.prototype.endsWith = function(str) {
    return this.substr(this.length - str.length) == str;
}

/**
*@description 判断字符串是否以指定的字符串结束，忽略大小写
*/
String.prototype.iEndsWith = function(str) {
    return this.substr(this.length - str.length).isEquals(str);
}

/**
 * 判断字符串是否为数字类型
 *
 * 对于省略写法，科学计数法，十六进制。都会认为是数字
 */
String.prototype.isNum = function() {
	  return !isNaN(Number(this));
}

/**
*@description 判断字符串是否为半角
*/
String.prototype.isDbccase = function() {

		reg=/[\u0000-\u00ff]/g
		
		return reg.test(this);	
}

/**
*@description 判断字符串是否是电话号码，传真号码
*
* 电话号码可以+开头，可以含有“-”
*/ 
String.prototype.isTel = function() {
	
	  //国家代码(2到3位)-区号(2到3位)-电话号码(7到8位)-分机号(3位)"
	 	var pattern =/^(([0\+]\d{2,3}-)?(0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/;
	 	
	 	return pattern.test(this);
}

/**
*@description 判断字符串是否是手机
*/
String.prototype.isMobile = function() {
			var checkFlag=false;	
			 
			var reg0=/^13\d{5,9}$/;   //130--139。至少7位
			var reg1=/^153\d{8}$/;  //联通153。至少7位
			var reg2=/^159\d{8}$/;  //移动159。至少7位
			var reg3=/^158\d{8}$/;
			var reg4=/^150\d{8}$/;
			var reg5=/^189\d{8}$/;
			 
			if (reg0.test(this))checkFlag=true;
			if (reg1.test(this))checkFlag=true;
			if (reg2.test(this))checkFlag=true;
			if (reg3.test(this))checkFlag=true;
			if (reg4.test(this))checkFlag=true;
			if (reg5.test(this))checkFlag=true;
			
			return checkFlag;
}

/**
 * 判断字符串是否是邮箱
 */
String.prototype.isMail = function() {	
			//字符串必须包含“@”，“.”
			pattern = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;

			return pattern.test(this);
}

/**
*@description 判断字符串是否是邮编
*/
String.prototype.isPost = function() {			
			//邮编必须是6位的数字
			pattern = /^[0-9]{6}$/;
			
			return pattern.test(this);
}

/**
*@description 验证日期是否合法
*
* 日期格式包括：“yyyyMMdd”，“yyyy-MM-dd”，“yyyy/MM/dd”
*/
String.prototype.isDate = function() {

		var pattern = /^(?:(?!0000)[0-9]{4}[\-\/\s]?(?:(?:0[1-9]|1[0-2])[\-\/\s]?(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])[\-\/\s]?(?:29|30)|(?:0[13578]|1[02])[\-\/\s]?31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)[\-\/\s]?02[\-\/\s]?29)$/;

  	return pattern.test(this);
}
/**
*@description 验证身份证
*
* 身份证格式：15位纯数字，或者17数字+ 一位数字或者“X”
*/
String.prototype.isIdCardNo = function() {
    var area = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" }

    var idcard, Y, JYM;
    var S, M;
    var idcard_array = new Array();
    idcard = this;
    idcard_array = idcard.split("");
    //地区检验
    if (area[parseInt(idcard.substr(0, 2))] == null) return false;
    //身份号码位数及格式检验
    switch (idcard.length) {
        case 15:
            if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0 || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0)) {
                ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/; //测试出生日期的合法性
            } else {
                ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/; //测试出生日期的合法性
            }
            if (ereg.test(idcard)) return true;
            else return false;
            break;
        case 18:
            //18位身份号码检测
            //出生日期的合法性检查
            //闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
            //平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
            if (parseInt(idcard.substr(6, 4)) % 4 == 0 || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6, 4)) % 4 == 0)) {
                ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/; //闰年出生日期的合法性正则表达式
            } else {
                ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/; //平年出生日期的合法性正则表达式
            }
            if (ereg.test(idcard)) {//测试出生日期的合法性
                //计算校验位
                S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
                + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
                + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
                + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
                + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
                + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
                + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
                + parseInt(idcard_array[7]) * 1
                + parseInt(idcard_array[8]) * 6
                + parseInt(idcard_array[9]) * 3;
                Y = S % 11;
                M = "F";
                JYM = "10X98765432";
                M = JYM.substr(Y, 1); //判断校验位
                if (M == idcard_array[17]) return true; //检测ID的校验位
                else return false;
            }
            else return false;
            break;
        default:
            return false;
            break;
    }
}


/**
*@description 重写Object对象的toString方法，用户JSON对象的字符串化
*/
Object.prototype.toString=function(){	
	var str='';
	for(var p in this){
		var val=this[p];
		if(val==null||val==undefined){
			val='';
		}
		str+=p+':"'+val+'",';
	}
	if(str.length){
		str=str.substring(0,str.length-1);
	}
	return '{'+str+'}';
}

/**
*@description 数组删除指定元素
*/
Array.prototype.remove=function(val){
	if(val==undefined){
		return;
	}
	if($.isArray(val)){//数组
		for(var i=0;i<val.length;i++){
			this.remove(val[i]);
		}
	}else{	
		var _index=-1;
		for(var i=0;i<this.length;i++){
			if(this[i]==val){
				_index=i;
				break;
			}
		}
		if(_index!=-1){
			this.splice(_index,1);
		}
	}
}
/**
*@description 数组后面添加数组
*/
Array.prototype.add=function(item){
	
	if(item==undefined){
		return;
	}
	if($.isArray(item)){//数组
		for(var i=0;i<item.length;i++){
			this.add(item[i]);
		}
	}else{	
		this.push(item);
	}
}



if(jQuery)(
	function(jQuery){
		jQuery.extend(jQuery.fn,{
			defText:function(options){
				jQuery(this).each(function(){
					var settings=jQuery.extend({
						deftxt:'请输入...'
					},options);
					this.value=settings.deftxt;
					
					
					this.defVal=settings.deftxt;
					$(this).bind('click',function(){
						if(this.value==this.defVal){						
							this.value='';
						}
					});
					$(this).bind('blur',function(){
						if(this.value==''){
							this.value=this.defVal;
						}
					});
					
				});
			},
			quickInput:function(options){
				var setting=options;
				setting.colWidth=setting.colWidth||50;
				setting.colNum=setting.colNum||4;
				setting.cls=setting.cls||'x-quickinput-dom';
				setting.optionCls=setting.optionCls||'x-quickinput-option';
				setting.btnCls=setting.btnCls||'x-quickinput-btn';
				setting.hoverCls=setting.hoverCls||'x-quickinput-option-hover';
				setting.addSplit=setting.addSplit==undefined?true:setting.addSplit;
				
				jQuery(this).each(function(){
					var ul1=$(document.createElement('ul'));
					ul1.addClass(setting.optionCls);
					for(var i=0;i<setting.items.length;i++){
						var li=document.createElement('li');
						li.innerHTML=setting.items[i];
						li.title=setting.items[i];
						li.style.width=setting.colWidth+'px';
						
						$(li).bind('click',{scope:this},function(e){
							e.data.scope.value+=(e.data.scope.value&&setting.addSplit?',':'')+this.innerHTML;
						});
						$(li).bind('mouseover',{scope:this},function(e){
							$(this).addClass(setting.hoverCls);
						});
						$(li).bind('mouseleave',{scope:this},function(e){
							$(this).removeClass(setting.hoverCls);
						});
						
						ul1.append(li);
					}
					var ul2=$(document.createElement('ul'));
					ul2.addClass(setting.btnCls);
					var b1=$(document.createElement('input'));
					b1[0].value='后退';
					b1[0].type='button';
					//ul2.append(b1);
					
					
					var b2=$(document.createElement('input'));
					b2[0].value='清空';
					b2[0].type='button';
					ul2.append(b2);
					
					var b3=$(document.createElement('input'));
					b3[0].value='关闭';
					b3[0].type='button';
					ul2.append(b3);
					
					var ol=$(document.createElement('ol'));
					ol.addClass(setting.cls);
					if(setting.colNum){
						ol.width(setting.colNum*setting.colWidth+10);
					}
					ol.append(ul1);
					ol.append(ul2);
					b1.bind('click',{scope:this},function(e){
						if(e.data.scope.value){
							e.data.scope.value=e.data.scope.value.substr(0,e.data.scope.value.length-1);
						}
					});
					b2.bind('click',{scope:this},function(e){
						if(e.data.scope.value){
							e.data.scope.value='';
						}
					});
					b3.bind('click',{scope:this},function(e){
						ol.hide();
					});
					if(setting.readonly){
						$(this).readonly();
					}
					$(document.body).append(ol);
					$(this).bind('focus',{scope:this},function(e){
						var offset=$(e.data.scope).offset();
						ol.css('top',offset.top+22+'px');
						ol.css('left',offset.left+'px');
						ol.show();
					});
					// $(this).bind('blur',function(){
						// ol.hide();
					// });
				});
			},
			disable:function(){				
				jQuery(this).each(function(){
					if(this.tagName=='INPUT'||this.tabName=='TEXTAREA'){
						this.disabled='true';
					}			
				});
			},
			enable:function(){				
				jQuery(this).each(function(){
					if(this.tagName=='INPUT'||this.tabName=='TEXTAREA'){
						this.disabled=false;
					}			
				});
			},
			readonly:function(){	
				jQuery(this).each(function(){
					if(this.tagName=='INPUT'||this.tabName=='TEXTAREA'){
						this.readonly='readonly';
					}			
				});			
			},
			editable:function(){
				jQuery(this).each(function(){
					if(this.tagName=='INPUT'||this.tabName=='TEXTAREA'){
						this.readonly='';
					}					
				});							
			},
			numberText:function(options){
				
				jQuery(this).each(function(){
					
					var settings=jQuery.extend({
						acceptEnter:true,
						minValue:undefined,
						maxValue:undefined,
						acceptDecimal:true//接受小数点
					},options);
				
					//var _oldValue=0;
					
					$(this).bind('keydown',function(e){
						//_oldValue=parseFloat(this.value);
						if(settings.acceptEnter&&e.keyCode==13){//Enter
							return true;
						}
						if(e.keyCode==8){//BackSpace BackSpace 
							return true;
						}
						if(e.keyCode==9){//Tab 
							return true;
						}
						if(e.keyCode==46){//Delete
							return true;
						}
						if((e.keyCode>46&&e.keyCode<58)||(e.keyCode>95&&e.keyCode<106)){//number
							return true;
						}
						if(settings.acceptDecimal&&(e.keyCode==190||e.keyCode==110)){//Decimal
							return true;
						}
						return false;
					});
					$(this).bind('change',function(e){
						var _newValue=parseFloat(this.value);
						if(settings.minValue!=undefined&&_newValue<settings.minValue){
							if(this.defVal){
								this.value=this.defVal;
							}else{
								this.value='';
							}
						}
						if(settings.maxValue!=undefined&&_newValue>settings.maxValue){
							if(this.defVal){
								this.value=this.defVal;
							}else{
								this.value='';
							}
						}						
					});
				});
			},
			collapse:function(options){
				var setting=options;
				setting.collapseCls=setting.collapseCls||'x-btn-collapse';
				setting.expandCls=setting.expandCls||'x-btn-expand';
				
				jQuery(this).each(function(){
					$(this).addClass(setting.expandCls);
					this.innerHTML=='收起';
					if(setting.collapse){
						$(this).addClass(setting.collapseCls);
						$(this).hide();
						this.innerHTML=='展开';
					}
					
					$(this).bind('click',function(){
						var fn=$(this).hasClass(setting.collapseCls)?'removeClass':'addClass';
						
						$(this)[fn](setting.collapseCls);
						this.innerHTML=fn=='removeClass'?'收起':'展开';
						setting.getDom.call(setting.scope||this)[fn=='removeClass'?'slideDown':'slideUp']();
						
					});
				});
			}
			
		});
})(jQuery);


